1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.codehaus.groovy.tools.groovydoc;
20
21 import org.codehaus.groovy.groovydoc.GroovyClassDoc;
22 import org.codehaus.groovy.groovydoc.GroovyPackageDoc;
23 import org.codehaus.groovy.groovydoc.GroovyRootDoc;
24
25 import java.util.ArrayList;
26 import java.util.Collections;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30
31 public class SimpleGroovyRootDoc extends SimpleGroovyDoc implements GroovyRootDoc {
32 private Map<String, GroovyPackageDoc> packageDocs;
33 private List<GroovyPackageDoc> packageDocValues = null;
34 private Map<String, GroovyClassDoc> classDocs;
35 private List<GroovyClassDoc> classDocValues = null;
36 private String description = "";
37
38 public SimpleGroovyRootDoc(String name) {
39 super(name);
40 packageDocs = new HashMap<String, GroovyPackageDoc>();
41 classDocs = new HashMap<String, GroovyClassDoc>();
42 }
43
44 public GroovyClassDoc classNamed(GroovyClassDoc groovyClassDoc, String name) {
45
46 for (String key : classDocs.keySet()) {
47 if (key.equals(name)) return classDocs.get(key);
48 int lastSlashIdx = key.lastIndexOf('/');
49 if (lastSlashIdx > 0) {
50 String shortKey = key.substring(lastSlashIdx + 1);
51 String fullPathName = groovyClassDoc != null ? groovyClassDoc.getFullPathName() : null;
52
53 boolean hasPackage = (fullPathName != null && fullPathName.lastIndexOf('/') > 0);
54 if (hasPackage) fullPathName = fullPathName.substring(0, fullPathName.lastIndexOf('/'));
55
56 if (shortKey.equals(name) && (!hasPackage || key.startsWith(fullPathName))) {
57 return classDocs.get(key);
58 }
59 }
60 }
61 return null;
62 }
63
64 public GroovyClassDoc classNamedExact(String name) {
65 for (String key : classDocs.keySet()) {
66 if (key.equals(name)) return classDocs.get(key);
67 }
68 return null;
69 }
70
71 public void setDescription(String description) {
72 this.description = description;
73 }
74
75 public String description() {
76 return description;
77 }
78
79 public String summary() {
80 return SimpleGroovyDoc.calculateFirstSentence(description);
81 }
82
83 public GroovyClassDoc[] classes() {
84 if (classDocValues == null) {
85 classDocValues = new ArrayList<GroovyClassDoc>(classDocs.values());
86 Collections.sort(classDocValues);
87 }
88 return classDocValues.toArray(new GroovyClassDoc[classDocValues.size()]);
89 }
90
91 public String[][] options() {
92 return null;
93 }
94
95 public GroovyPackageDoc packageNamed(String packageName) {
96 return packageDocs.get(packageName);
97 }
98
99 public void putAllClasses(Map<String, GroovyClassDoc> classes) {
100 classDocs.putAll(classes);
101 classDocValues = null;
102 }
103
104 public void put(String packageName, GroovyPackageDoc packageDoc) {
105 packageDocs.put(packageName, packageDoc);
106 packageDocValues = null;
107 }
108
109 public GroovyClassDoc[] specifiedClasses() {
110 return null;
111 }
112
113 public GroovyPackageDoc[] specifiedPackages() {
114 if (packageDocValues == null) {
115 packageDocValues = new ArrayList<GroovyPackageDoc>(packageDocs.values());
116 Collections.sort(packageDocValues);
117 }
118 return packageDocValues.toArray(new GroovyPackageDoc[packageDocValues.size()]);
119 }
120
121 public Map<String, GroovyClassDoc> getVisibleClasses(List importedClassesAndPackages) {
122 Map<String, GroovyClassDoc> visibleClasses = new HashMap<String, GroovyClassDoc>();
123 for (String fullClassName : classDocs.keySet()) {
124 String equivalentPackageImport = fullClassName.replaceAll("[^/]+$", "*");
125 if (importedClassesAndPackages.contains(fullClassName) ||
126 importedClassesAndPackages.contains(equivalentPackageImport)) {
127 GroovyClassDoc classDoc = classDocs.get(fullClassName);
128 visibleClasses.put(classDoc.name(), classDoc);
129 }
130 }
131 return visibleClasses;
132 }
133
134
135 public void printError(String arg0) {}
136
137
138 public void printNotice(String arg0) {}
139
140
141 public void printWarning(String arg0) {}
142
143
144 public void resolve() {
145
146 for (GroovyClassDoc groovyClassDoc : classDocs.values()) {
147 SimpleGroovyClassDoc classDoc = (SimpleGroovyClassDoc) groovyClassDoc;
148 classDoc.resolve(this);
149 }
150
151 }
152
153 }